/*
 * @Author: Tendo 
 * @Date: 2021-11-16 23:11:37 
 * @Last Modified by: Tendo
 * @Last Modified time: 2021-11-16 23:22:11
 */
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
 var subsets = function (nums) {
    let result = []
    let path = []
    function backtracking(startIndex) {
        // 其实可以不需要加终止条件，因为startIndex >= nums.size()，本层for循环本来也结束了。
        // if (startIndex >= nums.length) { 
        //     return;
        // }
        result.push(path.slice())
        for (let i = startIndex; i < nums.length; i++) {
            path.push(nums[i]) // 子集收集元素
            backtracking(i + 1) // 注意从i+1开始，元素不重复取
            path.pop() // 回溯
        }
    }
    backtracking(0)
    return result
};